Expand description
This crate provides Rust interfaces for NumPy C APIs, especially for the ndarray class.
It uses pyo3
for Rust bindings to CPython, and uses
ndarray
as the Rust matrix library.
To resolve its dependency on NumPy, it calls import numpy.core
internally.
This means that this crate should work if you can use NumPy in your Python environment,
e.g. after installing it by pip install numpy
. It does not matter whether you use
the system environment or a dedicated virtual environment.
Loading NumPy is done automatically and on demand. So if it is not installed, the functions provided by this crate will panic instead of returning a result.
Integration with nalgebra
is rovided via an implementation of ToPyArray
for nalgebra::Matrix
to convert nalgebra matrices into NumPy arrays
as well as the PyReadonlyArray::try_as_matrix
and PyReadwriteArray::try_as_matrix_mut
methods to treat NumPy array as nalgebra matrix slices.
Example
use numpy::pyo3::Python;
use numpy::ndarray::array;
use numpy::{ToPyArray, PyArray};
Python::with_gil(|py| {
let py_array = array![[1i64, 2], [3, 4]].to_pyarray(py);
assert_eq!(
py_array.readonly().as_array(),
array![[1i64, 2], [3, 4]]
);
});
use numpy::pyo3::Python;
use numpy::nalgebra::Matrix3;
use numpy::{pyarray, ToPyArray};
Python::with_gil(|py| {
let py_array = pyarray![py, [0, 1, 2], [3, 4, 5], [6, 7, 8]];
let py_array_square;
{
let py_array = py_array.readwrite();
let mut na_matrix = py_array.as_matrix_mut();
na_matrix.add_scalar_mut(1);
py_array_square = na_matrix.pow(2).to_pyarray(py);
}
assert_eq!(
py_array.readonly().as_matrix(),
Matrix3::new(1, 2, 3, 4, 5, 6, 7, 8, 9)
);
assert_eq!(
py_array_square.readonly().as_matrix(),
Matrix3::new(30, 36, 42, 66, 81, 96, 102, 126, 150)
);
});
Re-exports
pub use ndarray;
pub use pyo3;
pub use nalgebra;
pub use crate::array::get_array_module;
pub use crate::array::PyArray;
pub use crate::array::PyArray0;
pub use crate::array::PyArray1;
pub use crate::array::PyArray2;
pub use crate::array::PyArray3;
pub use crate::array::PyArray4;
pub use crate::array::PyArray5;
pub use crate::array::PyArray6;
pub use crate::array::PyArrayDyn;
pub use crate::borrow::PyReadonlyArray;
pub use crate::borrow::PyReadonlyArray1;
pub use crate::borrow::PyReadonlyArray2;
pub use crate::borrow::PyReadonlyArray3;
pub use crate::borrow::PyReadonlyArray4;
pub use crate::borrow::PyReadonlyArray5;
pub use crate::borrow::PyReadonlyArray6;
pub use crate::borrow::PyReadonlyArrayDyn;
pub use crate::borrow::PyReadwriteArray;
pub use crate::borrow::PyReadwriteArray1;
pub use crate::borrow::PyReadwriteArray2;
pub use crate::borrow::PyReadwriteArray3;
pub use crate::borrow::PyReadwriteArray4;
pub use crate::borrow::PyReadwriteArray5;
pub use crate::borrow::PyReadwriteArray6;
pub use crate::borrow::PyReadwriteArrayDyn;
pub use crate::convert::IntoPyArray;
pub use crate::convert::NpyIndex;
pub use crate::convert::ToNpyDims;
pub use crate::convert::ToPyArray;
pub use crate::npyffi::PY_ARRAY_API;
pub use crate::npyffi::PY_UFUNC_API;
Modules
Macros
Structs
Vec
cannot be treated as an array.numpy.dtype
.Enums
Traits
PyArray
.